home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / idlelib / ReplaceDialog.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  6KB  |  211 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. from Tkinter import *
  5. import SearchEngine
  6. from SearchDialogBase import SearchDialogBase
  7.  
  8. def replace(text):
  9.     root = text._root()
  10.     engine = SearchEngine.get(root)
  11.     if not hasattr(engine, '_replacedialog'):
  12.         engine._replacedialog = ReplaceDialog(root, engine)
  13.     
  14.     dialog = engine._replacedialog
  15.     dialog.open(text)
  16.  
  17.  
  18. class ReplaceDialog(SearchDialogBase):
  19.     title = 'Replace Dialog'
  20.     icon = 'Replace'
  21.     
  22.     def __init__(self, root, engine):
  23.         SearchDialogBase.__init__(self, root, engine)
  24.         self.replvar = StringVar(root)
  25.  
  26.     
  27.     def open(self, text):
  28.         SearchDialogBase.open(self, text)
  29.         
  30.         try:
  31.             first = text.index('sel.first')
  32.         except TclError:
  33.             first = None
  34.  
  35.         
  36.         try:
  37.             last = text.index('sel.last')
  38.         except TclError:
  39.             last = None
  40.  
  41.         if not first:
  42.             pass
  43.         first = text.index('insert')
  44.         if not last:
  45.             pass
  46.         last = first
  47.         self.show_hit(first, last)
  48.         self.ok = 1
  49.  
  50.     
  51.     def create_entries(self):
  52.         SearchDialogBase.create_entries(self)
  53.         self.replent = self.make_entry('Replace with:', self.replvar)
  54.  
  55.     
  56.     def create_command_buttons(self):
  57.         SearchDialogBase.create_command_buttons(self)
  58.         self.make_button('Find', self.find_it)
  59.         self.make_button('Replace', self.replace_it)
  60.         self.make_button('Replace+Find', self.default_command, 1)
  61.         self.make_button('Replace All', self.replace_all)
  62.  
  63.     
  64.     def find_it(self, event = None):
  65.         self.do_find(0)
  66.  
  67.     
  68.     def replace_it(self, event = None):
  69.         if self.do_find(self.ok):
  70.             self.do_replace()
  71.         
  72.  
  73.     
  74.     def default_command(self, event = None):
  75.         if self.do_find(self.ok):
  76.             self.do_replace()
  77.             self.do_find(0)
  78.         
  79.  
  80.     
  81.     def replace_all(self, event = None):
  82.         prog = self.engine.getprog()
  83.         if not prog:
  84.             return None
  85.         
  86.         repl = self.replvar.get()
  87.         text = self.text
  88.         res = self.engine.search_text(text, prog)
  89.         if not res:
  90.             text.bell()
  91.             return None
  92.         
  93.         text.tag_remove('sel', '1.0', 'end')
  94.         text.tag_remove('hit', '1.0', 'end')
  95.         line = res[0]
  96.         col = res[1].start()
  97.         if self.engine.iswrap():
  98.             line = 1
  99.             col = 0
  100.         
  101.         ok = 1
  102.         first = None
  103.         last = None
  104.         text.undo_block_start()
  105.         while None:
  106.             res = self.engine.search_forward(text, prog, line, col, 0, ok)
  107.             if not res:
  108.                 break
  109.             
  110.             (line, m) = res
  111.             chars = text.get('%d.0' % line, '%d.0' % (line + 1))
  112.             orig = m.group()
  113.             new = m.expand(repl)
  114.             (i, j) = m.span()
  115.             first = '%d.%d' % (line, i)
  116.             last = '%d.%d' % (line, j)
  117.             if new == orig:
  118.                 text.mark_set('insert', last)
  119.             else:
  120.                 text.mark_set('insert', first)
  121.                 if first != last:
  122.                     text.delete(first, last)
  123.                 
  124.                 if new:
  125.                     text.insert(first, new)
  126.                 
  127.             col = i + len(new)
  128.             ok = 0
  129.         text.undo_block_stop()
  130.         if first and last:
  131.             self.show_hit(first, last)
  132.         
  133.         self.close()
  134.  
  135.     
  136.     def do_find(self, ok = 0):
  137.         if not self.engine.getprog():
  138.             return False
  139.         
  140.         text = self.text
  141.         res = self.engine.search_text(text, None, ok)
  142.         if not res:
  143.             text.bell()
  144.             return False
  145.         
  146.         (line, m) = res
  147.         (i, j) = m.span()
  148.         first = '%d.%d' % (line, i)
  149.         last = '%d.%d' % (line, j)
  150.         self.show_hit(first, last)
  151.         self.ok = 1
  152.         return True
  153.  
  154.     
  155.     def do_replace(self):
  156.         prog = self.engine.getprog()
  157.         if not prog:
  158.             return False
  159.         
  160.         text = self.text
  161.         
  162.         try:
  163.             first = pos = text.index('sel.first')
  164.             last = text.index('sel.last')
  165.         except TclError:
  166.             pos = None
  167.  
  168.         if not pos:
  169.             first = last = pos = text.index('insert')
  170.         
  171.         (line, col) = SearchEngine.get_line_col(pos)
  172.         chars = text.get('%d.0' % line, '%d.0' % (line + 1))
  173.         m = prog.match(chars, col)
  174.         if not prog:
  175.             return False
  176.         
  177.         new = m.expand(self.replvar.get())
  178.         text.mark_set('insert', first)
  179.         text.undo_block_start()
  180.         if m.group():
  181.             text.delete(first, last)
  182.         
  183.         if new:
  184.             text.insert(first, new)
  185.         
  186.         text.undo_block_stop()
  187.         self.show_hit(first, text.index('insert'))
  188.         self.ok = 0
  189.         return True
  190.  
  191.     
  192.     def show_hit(self, first, last):
  193.         text = self.text
  194.         text.mark_set('insert', first)
  195.         text.tag_remove('sel', '1.0', 'end')
  196.         text.tag_add('sel', first, last)
  197.         text.tag_remove('hit', '1.0', 'end')
  198.         if first == last:
  199.             text.tag_add('hit', first)
  200.         else:
  201.             text.tag_add('hit', first, last)
  202.         text.see('insert')
  203.         text.update_idletasks()
  204.  
  205.     
  206.     def close(self, event = None):
  207.         SearchDialogBase.close(self, event)
  208.         self.text.tag_remove('hit', '1.0', 'end')
  209.  
  210.  
  211.